using System;
using System.Data;
using System.Xml;

namespace QidorSpider.Components.Data
{
	public interface DataAccess
	{
		#region Support Property & Method

        DatabaseType DatabaseType { get; }
        IDbConnection DbConnection { get; }
		IDbTransaction BeginTransaction();
		void Open();
		void Close();
        bool IsClosed { get; }

		#endregion 

		#region ExecuteNonQuery

		int ExecuteNonQuery(CommandType commandType, string commandText);
		int ExecuteNonQuery(string commandText);
		int ExecuteNonQuery(string commandText, QueryParameterCollection commandParameters);
		int ExecuteNonQuery(CommandType commandType, string commandText, QueryParameterCollection commandParameters);

        #endregion ExecuteNonQuery

		#region ExecuteDataSet

		DataSet ExecuteDataset(CommandType commandType, string commandText);
		DataSet ExecuteDataset(string commandText);
		DataSet ExecuteDataset(CommandType commandType, string commandText, QueryParameterCollection commandParameters);
		DataSet ExecuteDataset(string commandText, QueryParameterCollection commandParameters);
		DataSet ExecuteDataset(CommandType commandType, string commandText,string tableName);
		DataSet ExecuteDataset(string commandText,string tableName);
		DataSet ExecuteDataset(CommandType commandType, string commandText, QueryParameterCollection commandParameters,string tableName);
		DataSet ExecuteDataset(string commandText, QueryParameterCollection commandParameters,string tableName);
		DataSet ExecuteDataset(CommandType commandType, string commandText,DataSet ds);
		DataSet ExecuteDataset(string commandText,DataSet ds);
		DataSet ExecuteDataset(CommandType commandType, string commandText, QueryParameterCollection commandParameters,DataSet ds);
		DataSet ExecuteDataset(string commandText, QueryParameterCollection commandParameters,DataSet ds);
		DataSet ExecuteDataset(CommandType commandType, string commandText,DataSet ds,string tableName);
		DataSet ExecuteDataset(string commandText,DataSet ds,string tableName);
		DataSet ExecuteDataset(CommandType commandType, string commandText, QueryParameterCollection commandParameters,DataSet ds,string tableName);
		DataSet ExecuteDataset(string commandText, QueryParameterCollection commandParameters,DataSet ds,string tableName);

		#endregion ExecuteDataSet
	
		#region ExecuteReader		

		IDataReader ExecuteReader(CommandType commandType, string commandText);
		IDataReader ExecuteReader(string commandText);
		IDataReader ExecuteReader(CommandType commandType, string commandText, QueryParameterCollection commandParameters);
		IDataReader ExecuteReader(string commandText, QueryParameterCollection commandParameters);

		#endregion ExecuteReader

		#region ExecuteScalar

		object ExecuteScalar(CommandType commandType, string commandText);
		object ExecuteScalar(string commandText);
		object ExecuteScalar(CommandType commandType, string commandText, QueryParameterCollection commandParameters);
		object ExecuteScalar(string commandText, QueryParameterCollection commandParameters);

		#endregion ExecuteScalar	

		#region ExecuteXmlReader

		XmlReader ExecuteXmlReader(CommandType commandType, string commandText);
		XmlReader ExecuteXmlReader(string commandText);
		XmlReader ExecuteXmlReader(CommandType commandType, string commandText, QueryParameterCollection commandParameters);
		XmlReader ExecuteXmlReader(string commandText, QueryParameterCollection commandParameters);

		#endregion ExecuteXmlReader

        DataTable GetDataTable(string commandText);
        string GetDataColum(string columnName, string tableName, string columnKey, string columnKeyValue);
        void UpdateColum(string columnName, string columnValue, string tableName, string columnKey, string columnKeyValue);
        void AddRow(string[] columnName, string[] columnValue, string tableName, string columnKey);
        void UpdateRow(string[] columnName, string[] columnValue, string tableName, string columnKey, string columnKeyValue);
        void DelectRow(string tableName, string columnKey, string columnKeyValue);

	}
}

